#include <string>
#include <iostream>
#include <vector>
using namespace std;

class User
{
private:
    string Name;    // 姓名
    int Books;      // 托管的书籍量
    
    // 静态成员变量用于跟踪全局状态
    static int total_users;  // 书店人数
    static int total_books;  // 共享书籍总数
    
public:
    // 带参构造函数声明
    User(string name, int books);
    
    // 析构函数声明
    ~User();
    
    // 静态成员函数声明，用于获取书店状态
    static void GetState();
};
//======Begin======
// 初始化静态成员变量
int User::total_users = 0;
int User::total_books = 0;

// 定义构造函数
User::User(string name, int books) : Name(name), Books(books)
{
    total_users++;          // 增加书店人数
    total_books += books;   // 增加共享书籍数量
    cout << Name << " " << Books << " 进入" << endl;
}

// 定义析构函数
User::~User()
{
    total_users--;          // 减少书店人数
    total_books -= Books;   // 减少共享书籍数量
    cout << Name << " " << Books << " 离开" << endl;
}

// 定义静态成员函数GetState()
void User::GetState()
{
    int avg = 0;
    if (total_users > 0)
    {
        avg = total_books / total_users;  // 计算人均共享数量，自动取整
    }
    cout << "书店人数:" << total_users << "，书店共享书数量:" << total_books 
         << "，人均共享数量:" << avg << endl;
}
//=======End=======
int main()
{
    vector<User*> users;  // 使用vector存储用户指针
    string name;
    int books;
    
    // 持续读取输入直到文件结束
    while (cin >> name >> books)
    {
        users.push_back(new User(name, books));
        
        // 每添加两个用户后显示一次状态（根据测试用例的逻辑）
        if (users.size() % 2 == 0)
        {
            User::GetState();
        }
    }
    
    // 依次删除用户，模拟离开过程
    for (size_t i = 0; i < users.size(); i++)
    {
        delete users[i];
        users[i] = nullptr;
        
        // 删除用户后显示状态（最后一个用户删除后不重复显示）
        if (i != users.size() - 1)
        {
            User::GetState();
        }
    }
    
    return 0;
}
